﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using Aspose.Cells;
using System.IO;
using System.Security.AccessControl;

namespace GeneralLibs
{
    public class ExportToExcel
    {
        public enum ExportType
        {
            Word = 1, Pdf = 2, Excel = 3
        }

        #region Key file Aspose
        public static string _XmlKey = @"<?xml version=""1.0"" encoding=""utf-8""?> " +
                                       "<License> " +
                                       "  <Data> " +
                                       "    <LicensedTo>A IT JSC</LicensedTo> " +
                                       "    <DevelopersNote>Limited to all Developers within 1 Physical Site.</DevelopersNote> " +
                                       "    <OemNote>This is a non-redistributable license.</OemNote> " +
                                       "    <Products> " +
                                       "      <Product>Aspose.Cells</Product> " +
                                       "    </Products> " +
                                       "    <EditionType>Enterprise</EditionType> " +
                                       "    <SerialNumber>c4ccf2d0-bb70-4ef8-a828-5fad1cf9ca8c</SerialNumber> " +
                                       "    <SubscriptionExpiry>20070808</SubscriptionExpiry> " +
                                       "    <LicenseVersion>2.0</LicenseVersion> " +
                                       "  </Data> " +
                                       "  <Signature>sT3Xhd8Taq4AceBChn0mCQoN9Mv+37/KjHOK4AErE2ts4A42GCGsp3emv0UIg3bdfSPwndsETBZcOCoAdpE7ym+rLSvofLRSHHPYwTjyEYyp4vpMgduXqomh949iRwnRFhIhK1zoVZkQFGGfNdAkMq8GFRBeLdcT52IE0UnBFaA=</Signature> " +
                                       "</License> ";
        #endregion

        //Chuyển key file từ string sang stream
        public static Stream GenerateStreamFromString(string s)
        {
            MemoryStream stream = new MemoryStream();
            StreamWriter writer = new StreamWriter(stream);
            writer.Write(s);
            writer.Flush();
            stream.Position = 0;
            return stream;
        }

        static public DataTable ConvertHastTableToDataTable(System.Collections.Hashtable hashtable)
        {

            var dataTable = new DataTable(hashtable.GetType().Name);
            dataTable.Columns.Add("Key", typeof(object));
            dataTable.Columns.Add("Value", typeof(object));
            IDictionaryEnumerator enumerator = hashtable.GetEnumerator();
            while (enumerator.MoveNext())
            {
                dataTable.Rows.Add(enumerator.Key, enumerator.Value);
            }
            return dataTable;
        }

        private static void OpenFolderAndSelectFile(string pathFile)
        {
            string cmd = "explorer.exe";
            string arg = "/select," + pathFile;
            System.Diagnostics.Process.Start(cmd, arg);
        }

        static public bool ExportDataToExcel(System.Collections.Hashtable hashtable)
        {
            //Convert Hashtable --> DataTable
            DataTable dt = new DataTable();
            try
            {
                dt = ConvertHastTableToDataTable(hashtable);
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex is CustomException) throw ex;
                else
                {
                    throw new Exception(ex.Message);
                }
            }

            //Xuất ra excel
            try
            {
                return ExportDataToExcel(dt);
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex is CustomException) throw ex;
                else
                {
                    throw new Exception(ex.Message);
                }
            }
        }

        static public bool ExportDataToExcel(string tieude, DataTable dt)
        {
            try
            {
                dt = AddSTT(dt, false);
                Aspose.Cells.License license = new Aspose.Cells.License();
                Stream key = GenerateStreamFromString(_XmlKey); try { license.SetLicense(key); } catch (Exception ex) { };
                Workbook workbook = new Workbook();
                Cells cells = workbook.Worksheets[0].Cells;
                Worksheet sheet = workbook.Worksheets[0];

                int socot = dt.Columns.Count;
                int sohang = dt.Rows.Count;

                bool result = false;
                SaveFileDialog f = new SaveFileDialog();
                f.Filter = "Excel file (*.xls)|*.xls";
                if (f.ShowDialog() == DialogResult.OK)
                {
                    Aspose.Cells.Style styleTenDoanhNghiep = workbook.Styles[workbook.Styles.Add()];
                    Aspose.Cells.Style styleTieuDe = workbook.Styles[workbook.Styles.Add()];

                    styleTenDoanhNghiep.Borders.SetStyle(CellBorderType.None);
                    styleTenDoanhNghiep.Borders.DiagonalStyle = CellBorderType.None; // Bo gach cheo
                    styleTenDoanhNghiep.IsTextWrapped = true;
                    styleTenDoanhNghiep.HorizontalAlignment = TextAlignmentType.Left;
                    styleTenDoanhNghiep.VerticalAlignment = TextAlignmentType.Left;
                    styleTenDoanhNghiep.Font.IsBold = false;
                    styleTenDoanhNghiep.Font.Size = 12;

                    styleTieuDe.Borders.SetStyle(CellBorderType.None);
                    styleTieuDe.Borders.DiagonalStyle = CellBorderType.None; // Bo gach cheo
                    styleTieuDe.IsTextWrapped = true;
                    styleTieuDe.HorizontalAlignment = TextAlignmentType.Center;
                    styleTieuDe.VerticalAlignment = TextAlignmentType.Center;
                    styleTieuDe.Font.IsBold = true;
                    styleTieuDe.Font.Size = 14;

                    //dien du lieu vao header
                    string _tenDonVi = Config.TenDoanhNghiep;
                    cells[0, 0].PutValue(Config.TenDoanhNghiep);
                    cells[0, 0].Style = styleTenDoanhNghiep;
                    cells[1, 0].PutValue(Config.DiaChi);
                    cells[1, 0].Style = styleTenDoanhNghiep;
                    cells[2, 0].PutValue(Config.DienThoai);
                    cells[2, 0].Style = styleTenDoanhNghiep;
                    //Set Tieu de
                    cells[3, 0].PutValue(tieude);
                    cells[3, 0].Style = styleTieuDe;

                    //Merge cell để nhìn không bị co
                    cells.Merge(0, 0, 1, socot); //Gộp socot cột trên 1 hàng
                    cells.Merge(1, 0, 1, socot); 
                    cells.Merge(2, 0, 1, socot); 
                    cells.Merge(3, 0, 1, socot); 

                    //fill du lieu vao cac cot
                    sheet.Cells.ImportDataTable(dt, true, "A5");
                    if (sohang <= 1000)
                    {
                        for (int i = 0; i < socot; i++)
                        {
                            sheet.AutoFitColumn(i);
                        }
                        for (int i = 0; i < sohang; i++)
                        {
                            sheet.AutoFitRow(i);
                        }
                    }

                    workbook.Save(f.FileName, FileFormatType.Excel2003);

                    result = true;
                }

                if (result)
                {
                    if (MessageBox.Show("Xuất ra file excel thành công.\nBạn có muốn mở thư mục vừa lưu?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        OpenFolderAndSelectFile(f.FileName);
                    }
                }
                else MessageBox.Show("Xuất ra file excel thất bại!", "Thông báo");

                return result;
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex is CustomException) throw ex;
                else
                {
                    throw new Exception(ex.Message);
                }
            }
        }

        static public bool ExportDataToExcel(string tieude, DataTable dt, string fileName)
        {
            try
            {
                //có tiêu đề là bỏ dòng cuối, vì đó là dòng tính tổng
                dt = AddSTT(dt, true);

                Aspose.Cells.License license = new Aspose.Cells.License();
                Stream key = GenerateStreamFromString(_XmlKey); try { license.SetLicense(key); } catch (Exception ex) { };
                Workbook workbook = new Workbook();
                Cells cells = workbook.Worksheets[0].Cells;
                Worksheet sheet = workbook.Worksheets[0];

                int socot = dt.Columns.Count;
                int sohang = dt.Rows.Count;

                bool result = false;
                SaveFileDialog f = new SaveFileDialog();
                f.Filter = "Excel file (*.xls)|*.xls";
                f.FileName = fileName;
                if (f.ShowDialog() == DialogResult.OK)
                {
                    Aspose.Cells.Style styleTenDoanhNghiep = workbook.Styles[workbook.Styles.Add()];
                    Aspose.Cells.Style styleTieuDe = workbook.Styles[workbook.Styles.Add()];

                    styleTenDoanhNghiep.Borders.SetStyle(CellBorderType.None);
                    styleTenDoanhNghiep.Borders.DiagonalStyle = CellBorderType.None; // Bo gach cheo
                    styleTenDoanhNghiep.IsTextWrapped = true;
                    styleTenDoanhNghiep.HorizontalAlignment = TextAlignmentType.Left;
                    styleTenDoanhNghiep.VerticalAlignment = TextAlignmentType.Left;
                    styleTenDoanhNghiep.Font.IsBold = false;
                    styleTenDoanhNghiep.Font.Size = 12;

                    styleTieuDe.Borders.SetStyle(CellBorderType.None);
                    styleTieuDe.Borders.DiagonalStyle = CellBorderType.None; // Bo gach cheo
                    styleTieuDe.IsTextWrapped = true;
                    styleTieuDe.HorizontalAlignment = TextAlignmentType.Center;
                    styleTieuDe.VerticalAlignment = TextAlignmentType.Center;
                    styleTieuDe.Font.IsBold = true;
                    styleTieuDe.Font.Size = 14;

                    //dien du lieu vao header
                    string _tenDonVi = Config.TenDoanhNghiep;
                    cells[0, 0].PutValue(Config.TenDoanhNghiep);
                    cells[0, 0].Style = styleTenDoanhNghiep;
                    cells[1, 0].PutValue(Config.DiaChi);
                    cells[1, 0].Style = styleTenDoanhNghiep;
                    cells[2, 0].PutValue(Config.DienThoai);
                    cells[2, 0].Style = styleTenDoanhNghiep;
                    //Set Tieu de
                    cells[3, 0].PutValue(tieude);
                    cells[3, 0].Style = styleTieuDe;

                    //Merge cell để nhìn không bị co
                    cells.Merge(0, 0, 1, socot); //Gộp socot cột trên 1 hàng
                    cells.Merge(1, 0, 1, socot);
                    cells.Merge(2, 0, 1, socot);
                    cells.Merge(3, 0, 1, socot);

                    //fill du lieu vao cac cot
                    sheet.Cells.ImportDataTable(dt, true, "A5");
                    if (sohang <= 1000)
                    {
                        for (int i = 0; i < socot; i++)
                        {
                            sheet.AutoFitColumn(i);
                        }
                        for (int i = 0; i < sohang; i++)
                        {
                            sheet.AutoFitRow(i);
                        }
                    }

                    workbook.Save(f.FileName, FileFormatType.Excel2003);

                    result = true;
                }

                if (result)
                {
                    if (MessageBox.Show("Xuất ra file excel thành công.\nBạn có muốn mở thư mục vừa lưu?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        OpenFolderAndSelectFile(f.FileName);
                    }
                }
                else MessageBox.Show("Xuất ra file excel thất bại!", "Thông báo");

                return result;
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex is CustomException) throw ex;
                else
                {
                    throw new Exception(ex.Message);
                }
            }
        }

        static public bool ExportDataToExcel(string[] tieude, DataTable dt, string fileName)
        {
            try
            {
                //có tiêu đề là bỏ dòng cuối, vì đó là dòng tính tổng
                dt = AddSTT(dt, true);

                Aspose.Cells.License license = new Aspose.Cells.License();
                Stream key = GenerateStreamFromString(_XmlKey); try { license.SetLicense(key); } catch (Exception ex) { };
                Workbook workbook = new Workbook();
                Cells cells = workbook.Worksheets[0].Cells;
                Worksheet sheet = workbook.Worksheets[0];

                int socot = dt.Columns.Count;
                int sohang = dt.Rows.Count;
                int rowStartFillData = 3 + tieude.Length + 1;  //Tính toán dòng sẽ bắt đầu điền dữ liệu

                bool result = false;
                SaveFileDialog f = new SaveFileDialog();
                f.Filter = "Excel file (*.xls)|*.xls";
                f.FileName = fileName;
                if (f.ShowDialog() == DialogResult.OK)
                {
                    Aspose.Cells.Style styleTenDoanhNghiep = workbook.Styles[workbook.Styles.Add()];
                    Aspose.Cells.Style styleTieuDe = workbook.Styles[workbook.Styles.Add()];

                    styleTenDoanhNghiep.Borders.SetStyle(CellBorderType.None);
                    styleTenDoanhNghiep.Borders.DiagonalStyle = CellBorderType.None; // Bo gach cheo
                    styleTenDoanhNghiep.IsTextWrapped = true;
                    styleTenDoanhNghiep.HorizontalAlignment = TextAlignmentType.Left;
                    styleTenDoanhNghiep.VerticalAlignment = TextAlignmentType.Left;
                    styleTenDoanhNghiep.Font.IsBold = false;
                    styleTenDoanhNghiep.Font.Size = 12;

                    styleTieuDe.Borders.SetStyle(CellBorderType.None);
                    styleTieuDe.Borders.DiagonalStyle = CellBorderType.None; // Bo gach cheo
                    styleTieuDe.IsTextWrapped = true;
                    styleTieuDe.HorizontalAlignment = TextAlignmentType.Center;
                    styleTieuDe.VerticalAlignment = TextAlignmentType.Center;
                    styleTieuDe.Font.IsBold = true;
                    styleTieuDe.Font.Size = 14;

                    //dien du lieu vao header
                    string _tenDonVi = Config.TenDoanhNghiep;
                    cells[0, 0].PutValue(Config.TenDoanhNghiep);
                    cells[0, 0].Style = styleTenDoanhNghiep;
                    cells[1, 0].PutValue(Config.DiaChi);
                    cells[1, 0].Style = styleTenDoanhNghiep;
                    cells[2, 0].PutValue(Config.DienThoai);
                    cells[2, 0].Style = styleTenDoanhNghiep;
                    //Set Tieu de

                    for (int i = 3; i < rowStartFillData - 1; i++)
                    {
                        cells[i, 0].PutValue(tieude[i-3]);
                        cells[i, 0].Style = styleTieuDe;
                    }
                    for (int i = 0; i < rowStartFillData - 1; i++)
                    {
                        cells.Merge(i, 0, 1, socot); //Gộp socot cột trên 1 hàng
                    }

                    //fill du lieu vao cac cot
                    sheet.Cells.ImportDataTable(dt, true, string.Format("A{0}", rowStartFillData));
                    if (sohang <= 1000)
                    {
                        for (int i = 0; i < socot; i++)
                        {
                            sheet.AutoFitColumn(i);
                        }
                        for (int i = 0; i < sohang; i++)
                        {
                            sheet.AutoFitRow(i);
                        }
                    }

                    workbook.Save(f.FileName, FileFormatType.Excel2003);

                    result = true;
                }

                if (result)
                {
                    if (MessageBox.Show("Xuất ra file excel thành công.\nBạn có muốn mở thư mục vừa lưu?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        OpenFolderAndSelectFile(f.FileName);
                    }
                }
                else MessageBox.Show("Xuất ra file excel thất bại!", "Thông báo");

                return result;
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex is CustomException) throw ex;
                else
                {
                    throw new Exception(ex.Message);
                }
            }
        }

        static public bool ExportDataToExcelKhongSTT(string[] tieude, DataTable dt, string fileName)
        {
            try
            {
                Aspose.Cells.License license = new Aspose.Cells.License();
                Stream key = GenerateStreamFromString(_XmlKey); try { license.SetLicense(key); } catch (Exception ex) { };
                Workbook workbook = new Workbook();
                Cells cells = workbook.Worksheets[0].Cells;
                Worksheet sheet = workbook.Worksheets[0];

                int socot = dt.Columns.Count;
                int sohang = dt.Rows.Count;
                int rowStartFillData = 3 + tieude.Length + 1;  //Tính toán dòng sẽ bắt đầu điền dữ liệu

                bool result = false;
                SaveFileDialog f = new SaveFileDialog();
                f.Filter = "Excel file (*.xls)|*.xls";
                f.FileName = fileName;
                if (f.ShowDialog() == DialogResult.OK)
                {
                    Aspose.Cells.Style styleTenDoanhNghiep = workbook.Styles[workbook.Styles.Add()];
                    Aspose.Cells.Style styleTieuDe = workbook.Styles[workbook.Styles.Add()];

                    styleTenDoanhNghiep.Borders.SetStyle(CellBorderType.None);
                    styleTenDoanhNghiep.Borders.DiagonalStyle = CellBorderType.None; // Bo gach cheo
                    styleTenDoanhNghiep.IsTextWrapped = true;
                    styleTenDoanhNghiep.HorizontalAlignment = TextAlignmentType.Left;
                    styleTenDoanhNghiep.VerticalAlignment = TextAlignmentType.Left;
                    styleTenDoanhNghiep.Font.IsBold = false;
                    styleTenDoanhNghiep.Font.Size = 12;

                    styleTieuDe.Borders.SetStyle(CellBorderType.None);
                    styleTieuDe.Borders.DiagonalStyle = CellBorderType.None; // Bo gach cheo
                    styleTieuDe.IsTextWrapped = true;
                    styleTieuDe.HorizontalAlignment = TextAlignmentType.Center;
                    styleTieuDe.VerticalAlignment = TextAlignmentType.Center;
                    styleTieuDe.Font.IsBold = true;
                    styleTieuDe.Font.Size = 14;

                    //dien du lieu vao header
                    string _tenDonVi = Config.TenDoanhNghiep;
                    cells[0, 0].PutValue(Config.TenDoanhNghiep);
                    cells[0, 0].Style = styleTenDoanhNghiep;
                    cells[1, 0].PutValue(Config.DiaChi);
                    cells[1, 0].Style = styleTenDoanhNghiep;
                    cells[2, 0].PutValue(Config.DienThoai);
                    cells[2, 0].Style = styleTenDoanhNghiep;
                    //Set Tieu de

                    for (int i = 3; i < rowStartFillData - 1; i++)
                    {
                        cells[i, 0].PutValue(tieude[i - 3]);
                        cells[i, 0].Style = styleTieuDe;
                    }
                    for (int i = 0; i < rowStartFillData - 1; i++)
                    {
                        cells.Merge(i, 0, 1, socot); //Gộp socot cột trên 1 hàng
                    }

                    //fill du lieu vao cac cot
                    sheet.Cells.ImportDataTable(dt, true, string.Format("A{0}", rowStartFillData));
                    if (sohang <= 1000)
                    {
                        for (int i = 0; i < socot; i++)
                        {
                            sheet.AutoFitColumn(i);
                        }
                        for (int i = 0; i < sohang; i++)
                        {
                            sheet.AutoFitRow(i);
                        }
                    }

                    workbook.Save(f.FileName, FileFormatType.Excel2003);

                    result = true;
                }

                if (result)
                {
                    if (MessageBox.Show("Xuất ra file excel thành công.\nBạn có muốn mở thư mục vừa lưu?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        OpenFolderAndSelectFile(f.FileName);
                    }
                }
                else MessageBox.Show("Xuất ra file excel thất bại!", "Thông báo");

                return result;
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex is CustomException) throw ex;
                else
                {
                    throw new Exception(ex.Message);
                }
            }
        }

        static public bool ExportDataToExcel(DataTable dt)
        {
            try
            {
                dt = AddSTT(dt, false);
                Aspose.Cells.License license = new Aspose.Cells.License();
                Stream key = GenerateStreamFromString(_XmlKey); try { license.SetLicense(key); } catch (Exception ex) { };
                Workbook workbook = new Workbook();
                Cells cells = workbook.Worksheets[0].Cells;
                Worksheet sheet = workbook.Worksheets[0];

                int socot = dt.Columns.Count;
                int sohang = dt.Rows.Count;

                bool result = false;
                SaveFileDialog f = new SaveFileDialog();
                f.Filter = "Excel file (*.xls)|*.xls";
                if (f.ShowDialog() == DialogResult.OK)
                {
                    //fill du lieu vao cac cot
                    sheet.Cells.ImportDataTable(dt, true, "A1");
                    if (sohang <= 1000)
                    {
                        for (int i = 0; i < socot; i++)
                        {
                            sheet.AutoFitColumn(i);
                        }
                        for (int i = 0; i < sohang; i++)
                        {
                            sheet.AutoFitRow(i);
                        }
                    }

                    workbook.Save(f.FileName, FileFormatType.Excel2003);

                    result = true;
                }

                if (result)
                {
                    if (MessageBox.Show("Xuất ra file excel thành công.\nBạn có muốn mở thư mục vừa lưu?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        OpenFolderAndSelectFile(f.FileName);
                    }
                }
                else MessageBox.Show("Xuất ra file excel thất bại!", "Thông báo");

                return result;
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex is CustomException) throw ex;
                else
                {
                    throw new Exception(ex.Message);
                }
            }
        }

        static public bool ExportDataToExcel(DataTable dt, string fileName)
        {
            try
            {
                dt = AddSTT(dt,false);
                Aspose.Cells.License license = new Aspose.Cells.License();
                Stream key = GenerateStreamFromString(_XmlKey); try { license.SetLicense(key); } catch (Exception ex) { };
                Workbook workbook = new Workbook();
                Cells cells = workbook.Worksheets[0].Cells;
                Worksheet sheet = workbook.Worksheets[0];

                int socot = dt.Columns.Count;
                int sohang = dt.Rows.Count;

                bool result = false;
                SaveFileDialog f = new SaveFileDialog();
                f.Filter = "Excel file (*.xls)|*.xls";
                f.FileName = fileName;
                if (f.ShowDialog() == DialogResult.OK)
                {
                    //fill du lieu vao cac cot
                    sheet.Cells.ImportDataTable(dt, true, "A1");
                    if (sohang <= 1000)
                    {
                        for (int i = 0; i < socot; i++)
                        {
                            sheet.AutoFitColumn(i);
                        }
                        for (int i = 0; i < sohang; i++)
                        {
                            sheet.AutoFitRow(i);
                        }
                    }
                    workbook.Save(f.FileName, FileFormatType.Excel2003);

                    result = true;
                }

                if (result)
                {
                    if (MessageBox.Show("Xuất ra file excel thành công.\nBạn có muốn mở thư mục vừa lưu?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        OpenFolderAndSelectFile(f.FileName);
                    }
                }
                else MessageBox.Show("Xuất ra file excel thất bại!", "Thông báo");

                return result;
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex is CustomException) throw ex;
                else
                {
                    throw new Exception(ex.Message);
                }
            }
        }

        static public bool ExportDataToExcelSilent(DataTable dt, string fileName)
        {
            try
            {
                dt = AddSTT(dt, false);
                Aspose.Cells.License license = new Aspose.Cells.License();
                Stream key = GenerateStreamFromString(_XmlKey); try { license.SetLicense(key); } catch (Exception ex) { };
                Workbook workbook = new Workbook();
                Cells cells = workbook.Worksheets[0].Cells;
                Worksheet sheet = workbook.Worksheets[0];

                int socot = dt.Columns.Count;
                int sohang = dt.Rows.Count;

                bool result = false;
                SaveFileDialog f = new SaveFileDialog();
                f.Filter = "Excel file (*.xls)|*.xls";
                f.FileName = fileName;
                string pathStore = CommonLib.ThuMucGoc + @"\ExcelExport";
                if (!Directory.Exists(pathStore))
                {
                    Directory.CreateDirectory(pathStore);
                }
                //Set Fullcontrol folder for "Everyone" user
                DirectoryInfo myDirectoryInfo = new DirectoryInfo(pathStore);
                DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();
                foreach (FileSystemRights permission in Enum.GetValues(typeof(FileSystemRights)))
                {
                    myDirectorySecurity.AddAccessRule(
                        new FileSystemAccessRule("Everyone",
                                                 permission,
                                                 InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit | InheritanceFlags.None,
                                                 PropagationFlags.None,
                                                 AccessControlType.Allow));
                }
                string pathDate = CommonLib.ThuMucGoc + @"\ExcelExport\" + string.Format("{0}-{1}-{2}", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
                if (!Directory.Exists(pathDate))
                {
                    Directory.CreateDirectory(pathDate);
                }
                //Set Fullcontrol folder for "Everyone" user
                myDirectoryInfo = new DirectoryInfo(pathDate);
                myDirectorySecurity = myDirectoryInfo.GetAccessControl();
                foreach (FileSystemRights permission in Enum.GetValues(typeof(FileSystemRights)))
                {
                    myDirectorySecurity.AddAccessRule(
                        new FileSystemAccessRule("Everyone",
                                                 permission,
                                                 InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit | InheritanceFlags.None,
                                                 PropagationFlags.None,
                                                 AccessControlType.Allow));
                }
               
                //fill du lieu vao cac cot
                sheet.Cells.ImportDataTable(dt, true, "A1");
                if (sohang <= 1000)
                {
                    for (int i = 0; i < socot; i++)
                    {
                        sheet.AutoFitColumn(i);
                    }
                    for (int i = 0; i < sohang; i++)
                    {
                        sheet.AutoFitRow(i);
                    }
                }
                string name = pathDate + @"\" + fileName + ".xls";
                workbook.Save(name, FileFormatType.Excel2003);

                result = true;

                return result;
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex is CustomException) throw ex;
                else
                {
                    throw new Exception(ex.Message);
                }
            }
        }

        static public bool ExportDataToExcel(DataSet ds, string fileName)
        {
            try
            {
                //Xóa bảng không có dữ liệu đi
                int k = 0;
                while (k < ds.Tables.Count)
                {
                    DataTable dtCheck = ds.Tables[k];
                    if (dtCheck.Rows.Count <= 0 && ds.Tables.CanRemove(dtCheck)) ds.Tables.Remove(dtCheck);
                    k++;
                }

                foreach (DataTable dtNeedAddSTT in ds.Tables)
                {
                    dtNeedAddSTT.Merge(AddSTT(dtNeedAddSTT, false));
                }

                bool result = false;

                #region export vào từng sheet
                SaveFileDialog f = new SaveFileDialog();
                f.Filter = "Excel file (*.xls)|*.xls";
                f.FileName = fileName;

                if (f.ShowDialog() == DialogResult.OK)
                {
                    int sheetIndex = 0;
                    Workbook workbook = new Workbook();
                    Aspose.Cells.License license = new Aspose.Cells.License();
                    Stream key = GenerateStreamFromString(_XmlKey); try { license.SetLicense(key); } catch (Exception ex) { };

                    foreach (DataTable dataTable in ds.Tables)
                    {
                        if (sheetIndex >= 1)
                            workbook.Worksheets.Add();
                        Cells cells = workbook.Worksheets[sheetIndex].Cells;
                        Worksheet sheet = workbook.Worksheets[sheetIndex];

                        int socot = dataTable.Columns.Count;
                        int sohang = dataTable.Rows.Count;

                        //fill du lieu vao cac cot
                        sheet.Cells.ImportDataTable(dataTable, true, "A1");
                        if (sohang <= 1000)
                        {
                            for (int i = 0; i < socot; i++)
                            {
                                sheet.AutoFitColumn(i);
                            }
                            for (int i = 0; i < sohang; i++)
                            {
                                sheet.AutoFitRow(i);
                            }
                        }

                        sheetIndex++;
                    }
                    workbook.Save(f.FileName, FileFormatType.Excel2003);
                    result = true;
                }
                #endregion

                if (result)
                {
                    if (MessageBox.Show("Xuất ra file excel thành công.\nBạn có muốn mở thư mục vừa lưu?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        OpenFolderAndSelectFile(f.FileName);
                    }
                }
                else MessageBox.Show("Xuất ra file excel thất bại!", "Thông báo");

                return result;
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("COM object that has been separated from its underlying RCW cannot be used"))
                {
                    MessageBox.Show("Xuất ra file excel thành công!", "Thông báo");
                    return true;
                }
                else if (ex is CustomException) throw ex;
                else throw new Exception(ex.Message);
            }
        }

        static public bool ExportDataToExcel(string tieude, DataSet ds, string fileName)
        {
            try
            {
                //Xóa bảng không có dữ liệu đi
                int k = 0;
                while (k < ds.Tables.Count)
                {
                    DataTable dtCheck = ds.Tables[k];
                    if (dtCheck.Rows.Count <= 0 && ds.Tables.CanRemove(dtCheck)) ds.Tables.Remove(dtCheck);
                    k++;
                }

                foreach (DataTable dtNeedAddSTT in ds.Tables)
                {
                    dtNeedAddSTT.Merge(AddSTT(dtNeedAddSTT, true));
                }

                bool result = false;

                #region export vào từng sheet
                SaveFileDialog f = new SaveFileDialog();
                f.Filter = "Excel file (*.xls)|*.xls";
                f.FileName = fileName;

                if (f.ShowDialog() == DialogResult.OK)
                {
                    int sheetIndex = 0;
                    Workbook workbook = new Workbook();
                    Aspose.Cells.License license = new Aspose.Cells.License();
                    Stream key = GenerateStreamFromString(_XmlKey); try { license.SetLicense(key); } catch (Exception ex) { };

                    foreach (DataTable dataTable in ds.Tables)
                    {
                        if (sheetIndex >= 1)
                            workbook.Worksheets.Add();
                        Cells cells = workbook.Worksheets[sheetIndex].Cells;
                        Worksheet sheet = workbook.Worksheets[sheetIndex];

                        int socot = dataTable.Columns.Count;
                        int sohang = dataTable.Rows.Count;
                        if (tieude is string && tieude != "")
                        {
                            Aspose.Cells.Style styleTenDoanhNghiep = workbook.Styles[workbook.Styles.Add()];
                            Aspose.Cells.Style styleTieuDe = workbook.Styles[workbook.Styles.Add()];

                            styleTenDoanhNghiep.Borders.SetStyle(CellBorderType.None);
                            styleTenDoanhNghiep.Borders.DiagonalStyle = CellBorderType.None; // Bo gach cheo
                            styleTenDoanhNghiep.IsTextWrapped = true;
                            styleTenDoanhNghiep.HorizontalAlignment = TextAlignmentType.Left;
                            styleTenDoanhNghiep.VerticalAlignment = TextAlignmentType.Left;
                            styleTenDoanhNghiep.Font.IsBold = false;
                            styleTenDoanhNghiep.Font.Size = 12;

                            styleTieuDe.Borders.SetStyle(CellBorderType.None);
                            styleTieuDe.Borders.DiagonalStyle = CellBorderType.None; // Bo gach cheo
                            styleTieuDe.IsTextWrapped = true;
                            styleTieuDe.HorizontalAlignment = TextAlignmentType.Center;
                            styleTieuDe.VerticalAlignment = TextAlignmentType.Center;
                            styleTieuDe.Font.IsBold = true;
                            styleTieuDe.Font.Size = 14;

                            //dien du lieu vao header
                            string _tenDonVi = Config.TenDoanhNghiep;
                            cells[0, 0].PutValue(Config.TenDoanhNghiep);
                            cells[0, 0].Style = styleTenDoanhNghiep;
                            cells[1, 0].PutValue(Config.DiaChi);
                            cells[1, 0].Style = styleTenDoanhNghiep;
                            cells[2, 0].PutValue(Config.DienThoai);
                            cells[2, 0].Style = styleTenDoanhNghiep;
                            cells[3, 0].PutValue(tieude);
                            cells[3, 0].Style = styleTieuDe;

                            //Merge cell để nhìn không bị co
                            cells.Merge(0, 0, 1, socot); //Gộp socot cột trên 1 hàng
                            cells.Merge(1, 0, 1, socot);
                            cells.Merge(2, 0, 1, socot);
                            cells.Merge(3, 0, 1, socot);
                        }
                        //fill du lieu vao cac cot
                        sheet.Cells.ImportDataTable(dataTable, true, "A5");
                        if (sohang <= 1000)
                        {
                            for (int i = 0; i < socot; i++)
                            {
                                sheet.AutoFitColumn(i);
                            }
                            for (int i = 0; i < sohang; i++)
                            {
                                sheet.AutoFitRow(i);
                            }
                        }

                        sheetIndex++;
                    }
                    workbook.Save(f.FileName, FileFormatType.Excel2003);
                    result = true;
                }
                #endregion

                if (result)
                {
                    if (MessageBox.Show("Xuất ra file excel thành công.\nBạn có muốn mở thư mục vừa lưu?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        OpenFolderAndSelectFile(f.FileName);
                    }
                }
                else MessageBox.Show("Xuất ra file excel thất bại!", "Thông báo");

                return result;
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("COM object that has been separated from its underlying RCW cannot be used"))
                {
                    MessageBox.Show("Xuất ra file excel thành công!", "Thông báo");
                    return true;
                }
                else if (ex is CustomException) throw ex;
                else throw new Exception(ex.Message);
            }
        }

        static  public void ReleaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
               throw new  Exception("Exception Occured while releasing object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        }
   
        static public bool ExportReport(ExportType type,ReportDocument repd)
        {
            try
            {
                SaveFileDialog f = new SaveFileDialog();
                bool result = false;

                switch (type)
                {
                    case ExportType.Word:

                        f.Filter = "Word file(*.doc)|*.doc";
                        if (f.ShowDialog() == DialogResult.OK)
                        {
                            repd.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.WordForWindows, f.FileName);
                            result = true;
                        }
                        break;
                    case ExportType.Pdf:

                        f.Filter = "Pdf file(*.pdf)|*.pdf";
                        if (f.ShowDialog() == DialogResult.OK)
                        {
                            repd.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, f.FileName);
                            result = true;
                        }
                        break;
                    case ExportType.Excel:

                        f.Filter = "Excel file(*.xls)|*.xls";
                        if (f.ShowDialog() == DialogResult.OK)
                        {
                            repd.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.Excel, f.FileName);
                            result = true;
                        }
                        break;
                    default:
                        MessageBox.Show("Khong chon dung loai ");
                        break;


                }
                return result;
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex is CustomException) throw ex;
                else
                {
                    throw new Exception(ex.Message);
                }
            }
        }

        //Thêm cột STT vào đầu các datatable
        static public DataTable AddSTT(DataTable dt, bool boDongCuoiCung)
        {
            DataColumn colSTT = dt.Columns.Add("STT", typeof(int));
            colSTT.SetOrdinal(0);
            int maxRow = 0;
            if(boDongCuoiCung)
                maxRow = dt.Rows.Count - 1;
            else
                maxRow = dt.Rows.Count;

            for (int i = 1; i <= maxRow; i++)
            {
                dt.Rows[i - 1]["STT"] = i;
            }
            return dt;
        }

        //SortData in DataTable
        static public DataTable AlphabeticSortDataTable(DataTable dtTable, string sortColumn, int sortOrder)
        {
            try
            {
                DataSet dsSorted = new DataSet();
                string columnKey = sortColumn;
                string sortDirection = "";
                string sortFormat = "{0} {1}";
                switch (sortOrder)
                {
                    case 0:
                        sortDirection = "ASC";
                        break;
                    case 1:
                        sortDirection = "DESC";
                        break;
                    default:
                        sortDirection = "ASC";
                        break;
                }

                dtTable.DefaultView.Sort = string.Format(sortFormat, columnKey, sortDirection);
                return dtTable.DefaultView.Table;
            }
            catch (SqlException sqlEx)
            {
                throw new CustomException(CustomException.GetSqlExceptionMessage(sqlEx));
            }
            catch (Exception ex)
            {
                if (ex is CustomException) throw ex;
                else
                {
                    throw new Exception(ex.Message);
                }
            }
        }

        //Menthod chuẩn bị data cho xuất excel.Cần format cột khác nhau thì thêm ở đây
        static public void PreparingTableForExportExcelForVietBook(ref DataSet ds)
        {
            DataTable dtMauNhapHoaDon = new DataTable();
            dtMauNhapHoaDon.TableName = "MauNhapHoaDon";
            DataTable dtKhoanMucChungTu = new DataTable();
            dtKhoanMucChungTu.TableName = "KhoanMucChungTu";
            DataTable dtKhoanMucChungTuCoGiaVon = new DataTable();
            dtKhoanMucChungTuCoGiaVon.TableName = "KhoanMucChungTuCoGiaVon";
            DataTable dtDanhMuc = new DataTable();
            dtDanhMuc.TableName = "DanhMucHangHoa";


            #region Preparing Table DanhMucHangHoa
            dtDanhMuc.Columns.Add("Mã", typeof(string));
            dtDanhMuc.Columns.Add("Mã nhóm", typeof(string));
            dtDanhMuc.Columns.Add("Tên", typeof(string));
            dtDanhMuc.Columns.Add("Giá bán lẻ", typeof(decimal));
            dtDanhMuc.Columns.Add("CK bán lẻ (tự nhập)", typeof(int));
            dtDanhMuc.Columns.Add("CK mua (tự nhập)", typeof(int));
            dtDanhMuc.Columns.Add("CK bán buôn (tự nhập)", typeof(int));
            dtDanhMuc.Columns.Add("Đơn vị tính", typeof(string));
            dtDanhMuc.Columns.Add("Tác giả", typeof(string));
            dtDanhMuc.Columns.Add("NXB", typeof(string));
            dtDanhMuc.Columns.Add("Nguồn cung cấp", typeof(string));
            dtDanhMuc.Columns.Add("Ghi chú", typeof(string));
            #endregion

            #region Preparing Table MauNhapHoaDon
            dtMauNhapHoaDon.Columns.Add("Mã", typeof(string));
            dtMauNhapHoaDon.Columns.Add("Số lượng", typeof(decimal));
            dtMauNhapHoaDon.Columns.Add("Giá nhập", typeof(decimal));
            dtMauNhapHoaDon.Columns.Add("Chiết khấu", typeof(decimal));
            dtMauNhapHoaDon.Columns.Add("Ghi chú", typeof(string));
            #endregion

            #region Preparing Table KhoanMucChungTu
            dtKhoanMucChungTu.Columns.Add("Mã", typeof(string));
            dtKhoanMucChungTu.Columns.Add("Tên", typeof(string));
            dtKhoanMucChungTu.Columns.Add("Đơn vị tính", typeof(string));
            dtKhoanMucChungTu.Columns.Add("Số lượng", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Giá bán lẻ", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Chiết khấu", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Đơn giá thanh toán", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Thành tiền thanh toán", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Ghi chú", typeof(string));
            #endregion

            #region Preparing Table dtKhoanMucChungTuCoGiaVon - cho phiếu kiểm kê, nhập xuất kho
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Mã", typeof(string));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Tên", typeof(string));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Đơn vị tính", typeof(string));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Số lượng", typeof(decimal));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Giá bán lẻ", typeof(decimal));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("% Vốn", typeof(decimal));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Đơn giá vốn", typeof(decimal));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Thành tiền vốn", typeof(decimal));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Ghi chú", typeof(string));
            #endregion

            ds.Tables.Add(dtMauNhapHoaDon);
            ds.Tables.Add(dtKhoanMucChungTu);
            ds.Tables.Add(dtDanhMuc);
            ds.Tables.Add(dtKhoanMucChungTuCoGiaVon);
        }

        static public void PreparingTableForExportExcelFornhapXuatChuyenKhoForVietBook(ref DataSet ds)
        {
            DataTable dtMauNhapHoaDon = new DataTable();
            dtMauNhapHoaDon.TableName = "MauNhapHoaDon";
            DataTable dtKhoanMucChungTu = new DataTable();
            dtKhoanMucChungTu.TableName = "KhoanMucChungTu";
            DataTable dtDanhMuc = new DataTable();
            dtDanhMuc.TableName = "DanhMucHangHoa";


            #region Preparing Table DanhMucHangHoa
            dtDanhMuc.Columns.Add("Mã", typeof(string));
            dtDanhMuc.Columns.Add("Mã nhóm", typeof(string));
            dtDanhMuc.Columns.Add("Tên", typeof(string));
            dtDanhMuc.Columns.Add("Giá bán lẻ", typeof(decimal));
            dtDanhMuc.Columns.Add("CK bán lẻ (tự nhập)", typeof(int));
            dtDanhMuc.Columns.Add("CK mua (tự nhập)", typeof(int));
            dtDanhMuc.Columns.Add("CK bán buôn (tự nhập)", typeof(int));
            dtDanhMuc.Columns.Add("Đơn vị tính", typeof(string));
            dtDanhMuc.Columns.Add("Tác giả", typeof(string));
            dtDanhMuc.Columns.Add("NXB", typeof(string));
            dtDanhMuc.Columns.Add("Nguồn cung cấp", typeof(string));
            dtDanhMuc.Columns.Add("Ghi chú", typeof(string));
            #endregion

            #region Preparing Table MauNhapHoaDon
            dtMauNhapHoaDon.Columns.Add("Mã", typeof(string));
            dtMauNhapHoaDon.Columns.Add("Số lượng", typeof(decimal));
            dtMauNhapHoaDon.Columns.Add("Giá vốn xuất", typeof(decimal));
            dtMauNhapHoaDon.Columns.Add("Ghi chú", typeof(string));
            #endregion

            #region Preparing Table KhoanMucChungTu
            dtKhoanMucChungTu.Columns.Add("Mã", typeof(string));
            dtKhoanMucChungTu.Columns.Add("Tên", typeof(string));
            dtKhoanMucChungTu.Columns.Add("Đơn vị tính", typeof(string));
            dtKhoanMucChungTu.Columns.Add("Số lượng", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Đơn giá vốn xuất", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Thành tiền xuất", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Ghi chú", typeof(string));
            #endregion

            ds.Tables.Add(dtMauNhapHoaDon);
            ds.Tables.Add(dtKhoanMucChungTu);
            ds.Tables.Add(dtDanhMuc);
        }

        //Menthod chuẩn bị data cho xuất excel.Cần format cột khác nhau thì thêm ở đây
        static public void PreparingTableForExportExcel(ref DataSet ds)
        {
            DataTable dtMauNhapHoaDon = new DataTable();
            dtMauNhapHoaDon.TableName = "MauNhapHoaDon";
            DataTable dtMauNhapPhieuNhapXuatKho = new DataTable();
            dtMauNhapPhieuNhapXuatKho.TableName = "MauNhapPhieuNhapXuatKho";
            DataTable dtKhoanMucChungTu = new DataTable();
            dtKhoanMucChungTu.TableName = "KhoanMucChungTu";
            DataTable dtKhoanMucChungTuCoGiaVon = new DataTable();
            dtKhoanMucChungTuCoGiaVon.TableName = "KhoanMucChungTuCoGiaVon";
            DataTable dtDanhMuc = new DataTable();
            dtDanhMuc.TableName = "DanhMucHangHoa";
            DataTable dtKhoanMucChungTuVanViet = new DataTable();
            dtKhoanMucChungTuVanViet.TableName = "KhoanMucChungTuVanViet";

            #region Preparing Table DanhMucHangHoa
            dtDanhMuc.Columns.Add("Mã", typeof(string));
            dtDanhMuc.Columns.Add("Mã nhóm", typeof(string));
            dtDanhMuc.Columns.Add("Tên", typeof(string));
            dtDanhMuc.Columns.Add("Giá bán lẻ", typeof(decimal));
            dtDanhMuc.Columns.Add("CK bán lẻ (tự nhập)", typeof(int));
            dtDanhMuc.Columns.Add("CK mua (tự nhập)", typeof(int));
            dtDanhMuc.Columns.Add("CK bán buôn (tự nhập)", typeof(int));
            dtDanhMuc.Columns.Add("Đơn vị tính", typeof(string));
            dtDanhMuc.Columns.Add("Tác giả", typeof(string));
            dtDanhMuc.Columns.Add("NXB", typeof(string));
            dtDanhMuc.Columns.Add("Nguồn cung cấp", typeof(string));
            dtDanhMuc.Columns.Add("Ghi chú", typeof(string));
            #endregion

            #region Preparing Table MauNhapHoaDon
            dtMauNhapHoaDon.Columns.Add("Mã", typeof(string));
            dtMauNhapHoaDon.Columns.Add("Số lượng", typeof(decimal));
            dtMauNhapHoaDon.Columns.Add("Giá nhập", typeof(decimal));
            dtMauNhapHoaDon.Columns.Add("Chiết khấu", typeof(decimal));
            #endregion

            #region Preparing Table MauNhapPhieuNhapXuatKho
            dtMauNhapPhieuNhapXuatKho.Columns.Add("Mã", typeof(string));
            dtMauNhapPhieuNhapXuatKho.Columns.Add("Số lượng", typeof(decimal));
            dtMauNhapPhieuNhapXuatKho.Columns.Add("Giá nhập (NET)", typeof(decimal));
            #endregion

            #region Preparing Table KhoanMucChungTu
            dtKhoanMucChungTu.Columns.Add("Mã", typeof(string));
            dtKhoanMucChungTu.Columns.Add("Tên", typeof(string));
            dtKhoanMucChungTu.Columns.Add("Đơn vị tính", typeof(string));
            dtKhoanMucChungTu.Columns.Add("Số lượng", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Giá bán lẻ", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Chiết khấu", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Đơn giá thanh toán", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Thành tiền thanh toán", typeof(decimal));
            #endregion

            #region Preparing Table KhoanMucChungTuVanViet
            dtKhoanMucChungTuVanViet.Columns.Add("Mã", typeof(string));
            dtKhoanMucChungTuVanViet.Columns.Add("Tên", typeof(string));
            dtKhoanMucChungTuVanViet.Columns.Add("SL", typeof(decimal));
            dtKhoanMucChungTuVanViet.Columns.Add("Giá bán lẻ", typeof(decimal));
            dtKhoanMucChungTuVanViet.Columns.Add("CK", typeof(decimal));
            dtKhoanMucChungTuVanViet.Columns.Add("Đơn giá", typeof(decimal));
            dtKhoanMucChungTuVanViet.Columns.Add("Thành tiền", typeof(decimal));
            #endregion

            #region Preparing Table dtKhoanMucChungTuCoGiaVon - cho phiếu kiểm kê, nhập xuất kho
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Mã", typeof(string));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Tên", typeof(string));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Đơn vị tính", typeof(string));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Số lượng", typeof(decimal));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Giá bán lẻ", typeof(decimal));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("% Vốn", typeof(decimal));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Đơn giá vốn", typeof(decimal));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Thành tiền vốn", typeof(decimal));
            dtKhoanMucChungTuCoGiaVon.Columns.Add("Ghi chú", typeof(string));
            #endregion

            ds.Tables.Add(dtMauNhapHoaDon);
            ds.Tables.Add(dtMauNhapPhieuNhapXuatKho);
            ds.Tables.Add(dtKhoanMucChungTu);
            ds.Tables.Add(dtDanhMuc);
            ds.Tables.Add(dtKhoanMucChungTuCoGiaVon);
            ds.Tables.Add(dtKhoanMucChungTuVanViet);
        }

        static public void PreparingTableForExportExcelFornhapXuatChuyenKho(ref DataSet ds)
        {
            DataTable dtMauNhapHoaDon = new DataTable();
            dtMauNhapHoaDon.TableName = "MauNhapHoaDon";
            DataTable dtKhoanMucChungTu = new DataTable();
            dtKhoanMucChungTu.TableName = "KhoanMucChungTu";
            DataTable dtDanhMuc = new DataTable();
            dtDanhMuc.TableName = "DanhMucHangHoa";


            #region Preparing Table DanhMucHangHoa
            dtDanhMuc.Columns.Add("Mã", typeof(string));
            dtDanhMuc.Columns.Add("Mã nhóm", typeof(string));
            dtDanhMuc.Columns.Add("Tên", typeof(string));
            dtDanhMuc.Columns.Add("Giá bán lẻ", typeof(decimal));
            dtDanhMuc.Columns.Add("CK bán lẻ (tự nhập)", typeof(int));
            dtDanhMuc.Columns.Add("CK mua (tự nhập)", typeof(int));
            dtDanhMuc.Columns.Add("CK bán buôn (tự nhập)", typeof(int));
            dtDanhMuc.Columns.Add("Đơn vị tính", typeof(string));
            dtDanhMuc.Columns.Add("Tác giả", typeof(string));
            dtDanhMuc.Columns.Add("NXB", typeof(string));
            dtDanhMuc.Columns.Add("Nguồn cung cấp", typeof(string));
            dtDanhMuc.Columns.Add("Ghi chú", typeof(string));
            #endregion

            #region Preparing Table MauNhapHoaDon
            dtMauNhapHoaDon.Columns.Add("Mã", typeof(string));
            dtMauNhapHoaDon.Columns.Add("Số lượng", typeof(decimal));
            dtMauNhapHoaDon.Columns.Add("Giá vốn xuất", typeof(decimal));
            #endregion

            #region Preparing Table KhoanMucChungTu
            dtKhoanMucChungTu.Columns.Add("Mã", typeof(string));
            dtKhoanMucChungTu.Columns.Add("Tên", typeof(string));
            dtKhoanMucChungTu.Columns.Add("Đơn vị tính", typeof(string));
            dtKhoanMucChungTu.Columns.Add("Số lượng", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Đơn giá vốn xuất", typeof(decimal));
            dtKhoanMucChungTu.Columns.Add("Thành tiền xuất", typeof(decimal));
            #endregion

            ds.Tables.Add(dtMauNhapHoaDon);
            ds.Tables.Add(dtKhoanMucChungTu);
            ds.Tables.Add(dtDanhMuc);
        }
    }
}
